<!DOCTYPE html>










































































<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<link rel="shortcut icon" type="image/x-icon" href="../../../../../../favicon.ico" />
<title>GoogleCloudMessaging | Android Developers</title>

<!-- STYLESHEETS -->
<link rel="stylesheet"
href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
<link href="../../../../../../assets/css/default.css" rel="stylesheet" type="text/css">


<!-- FULLSCREEN STYLESHEET -->
<link href="../../../../../../assets/css/fullscreen.css" rel="stylesheet" class="fullscreen"
type="text/css">


<!-- JAVASCRIPT -->
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script src="../../../../../../assets/js/global-libraries-combined.js" type="text/javascript"></script>
<script type="text/javascript">
  var toRoot = "../../../../../../";
</script>
<script src="../../../../../../assets/js/docs.js" type="text/javascript"></script>

<script src="../../../../../../navtree_data.js" type="text/javascript"></script>

</head>
<body class="gc-documentation 
  develop" itemscope itemtype="http://schema.org/Article">
  <div id="doc-api-level" class="" style="display:none"></div>
  <a name="top"></a>

    <!-- Header -->
    <div id="header">
        <div class="wrap" id="header-wrap">
          <div class="col-3 logo">
          <a href="../../../../../../index.html">
            <img src="../../../../../../assets/images/dac_logo.png" width="123" height="25" alt="Android Developers" />
          </a>
          <div class="btn-quicknav" id="btn-quicknav">
          	<a href="#" class="arrow-inactive">Quicknav</a>
			      <a href="#" class="arrow-active">Quicknav</a>
          </div>
          </div>
            <ul class="nav-x col-9">
                <li class="design">
                  <a href="../../../../../../design/index.html" 
                  zh-TW-lang="設計"
                  zh-CN-lang="设计"
                  ru-lang="Проектирование"
                  ko-lang="디자인"
                  ja-lang="設計"
                  es-lang="Diseñar"               
                  >Design</a></li>
                <li class="develop"><a href="../../../../../../develop/index.html" class="selected"
                  zh-TW-lang="開發"
                  zh-CN-lang="开发"
                  ru-lang="Разработка"
                  ko-lang="개발"
                  ja-lang="開発"
                  es-lang="Desarrollar"               
                  >Develop</a></li>
                <li class="distribute last"><a href="../../../../../../distribute/index.html" 
                  zh-TW-lang="發佈"
                  zh-CN-lang="分发"
                  ru-lang="Распространение"
                  ko-lang="배포"
                  ja-lang="配布"
                  es-lang="Distribuir"               
                  >Distribute</a></li>
            </ul>
            
            <!-- New Search -->
            <div class="menu-container">
            <div class="moremenu">
    <div id="more-btn"></div>
  </div>
  <div class="morehover" id="moremenu">
    <div class="top"></div>
    <div class="mid">
      <div class="header">Links</div>
      <ul>
        <li><a href="https://play.google.com/apps/publish/">Google Play Developer Console</a></li>
        <li><a href="http://android-developers.blogspot.com/">Android Developers Blog</a></li>
        <li><a href="../../../../../../about/index.html">About Android</a></li>
      </ul>
      <div class="header">Android Sites</div>
      <ul>
        <li><a href="http://www.android.com">Android.com</a></li>
        <li class="active"><a>Android Developers</a></li>
        <li><a href="http://source.android.com">Android Open Source Project</a></li>
      </ul>
      <!-- <div class="header">Support</div>
      <ul>
        <li><a href="../../../../../../support.html">Developer Support</a></li>
      </ul> -->
      <div class="header">Languages</div>
        <div id="language" class="locales">
          <select name="language" onChange="changeLangPref(this.value, true)">
              <option value="en">English</option>
              <option value="es">Español</option>
              <option value="ja">日本語</option>
              <option value="ko">한국어</option>
              <option value="ru">Русский</option>
              <option value="zh-CN">中文 (中国)</option>
              <option value="zh-TW">中文 (台灣)</option>
          </select>
        </div>
      <script type="text/javascript">
        <!--  
        loadLangPref();  
          //-->
      </script>
      <br class="clearfix" />
    </div>
    <div class="bottom"></div>
  </div>
  <div class="search" id="search-container">
    <div class="search-inner">
      <div id="search-btn"></div>
      <div class="left"></div>
      <form onsubmit="return submit_search()">
        <input id="search_autocomplete" type="text" value="" autocomplete="off" name="q"
onfocus="search_focus_changed(this, true)" onblur="search_focus_changed(this, false)"
onkeydown="return search_changed(event, true, '../../../../../../')" 
onkeyup="return search_changed(event, false, '../../../../../../')" />
      </form>
      <div class="right"></div>
        <a class="close hide">close</a>
        <div class="left"></div>
        <div class="right"></div>
    </div>
  </div>
  <div id="search_filtered_wrapper">
    <div id="search_filtered_div" class="no-display">
        <ul id="search_filtered">
        </ul>
    </div>
  </div>
  
  </div>
  <!-- /New Search>
          
          
          <!-- Expanded quicknav -->
           <div id="quicknav" class="col-9">
                <ul>
                    <li class="design">
                      <ul>
                        <li><a href="../../../../../../design/index.html">Get Started</a></li>
                        <li><a href="../../../../../../design/style/index.html">Style</a></li>
                        <li><a href="../../../../../../design/patterns/index.html">Patterns</a></li>
                        <li><a href="../../../../../../design/building-blocks/index.html">Building Blocks</a></li>
                        <li><a href="../../../../../../design/downloads/index.html">Downloads</a></li>
                        <li><a href="../../../../../../design/videos/index.html">Videos</a></li>
                      </ul>
                    </li>
                    <li class="develop">
                      <ul>
                        <li><a href="../../../../../../training/index.html"
                          zh-TW-lang="訓練課程"
                          zh-CN-lang="培训"
                          ru-lang="Курсы"
                          ko-lang="교육"
                          ja-lang="トレーニング"
                          es-lang="Capacitación"               
                          >Training</a></li>
                        <li><a href="../../../../../../guide/components/index.html"
                          zh-TW-lang="API 指南"
                          zh-CN-lang="API 指南"
                          ru-lang="Руководства по API"
                          ko-lang="API 가이드"
                          ja-lang="API ガイド"
                          es-lang="Guías de la API"               
                          >API Guides</a></li>
                        <li><a href="../../../../../../reference/packages.html"
                          zh-TW-lang="參考資源"
                          zh-CN-lang="参考"
                          ru-lang="Справочник"
                          ko-lang="참조문서"
                          ja-lang="リファレンス"
                          es-lang="Referencia"               
                          >Reference</a></li>
                        <li><a href="../../../../../../tools/index.html"
                          zh-TW-lang="相關工具"
                          zh-CN-lang="工具"
                          ru-lang="Инструменты"
                          ko-lang="도구"
                          ja-lang="ツール"
                          es-lang="Herramientas"               
                          >Tools</a>
                          <ul><li><a href="../../../../../../sdk/index.html">Get the SDK</a></li></ul>
                        </li>
                        <li><a href="../../../../../../google/index.html">Google Services</a>
                        </li>
                      </ul>
                    </li>
                    <li class="distribute last">
                      <ul>
                        <li><a href="../../../../../../distribute/index.html">Google Play</a></li>
                        <li><a href="../../../../../../distribute/googleplay/publish/index.html">Publishing</a></li>
                        <li><a href="../../../../../../distribute/googleplay/promote/index.html">Promoting</a></li>
                        <li><a href="../../../../../../distribute/googleplay/quality/index.html">App Quality</a></li>
                        <li><a href="../../../../../../distribute/googleplay/spotlight/index.html">Spotlight</a></li>
                        <li><a href="../../../../../../distribute/open.html">Open Distribution</a></li>
                      </ul>
                    </li>
                </ul>
          </div>
          <!-- /Expanded quicknav -->
        </div>
    </div>
    <!-- /Header -->
    
    
  <div id="searchResults" class="wrap" style="display:none;">
          <h2 id="searchTitle">Results</h2>
          <div id="leftSearchControl" class="search-control">Loading...</div>
  </div>
    
    
    

    <!-- Secondary x-nav -->
    <div id="nav-x">
        <div class="wrap">
            <ul class="nav-x col-9 develop" style="width:100%">
                <li><a href="../../../../../../training/index.html" 
                  zh-TW-lang="訓練課程"
                  zh-CN-lang="培训"
                  ru-lang="Курсы"
                  ko-lang="교육"
                  ja-lang="トレーニング"
                  es-lang="Capacitación"               
                  >Training</a></li>
                <li><a href="../../../../../../guide/components/index.html" 
                  zh-TW-lang="API 指南"
                  zh-CN-lang="API 指南"
                  ru-lang="Руководства по API"
                  ko-lang="API 가이드"
                  ja-lang="API ガイド"
                  es-lang="Guías de la API"               
                  >API Guides</a></li>
                <li><a href="../../../../../../reference/packages.html" class="selected"
                  zh-TW-lang="參考資源"
                  zh-CN-lang="参考"
                  ru-lang="Справочник"
                  ko-lang="참조문서"
                  ja-lang="リファレンス"
                  es-lang="Referencia"               
                  >Reference</a></li>
                <li><a href="../../../../../../tools/index.html" 
                  zh-TW-lang="相關工具"
                  zh-CN-lang="工具"
                  ru-lang="Инструменты"
                  ko-lang="도구"
                  ja-lang="ツール"
                  es-lang="Herramientas"
                  >Tools</a></li>
                <li><a href="../../../../../../google/index.html" 
                  >Google Services</a>
                </li>
            </ul>
        </div>
        
    </div>
    <!-- /Sendondary x-nav -->

  


  <div class="wrap clearfix" id="body-content">
    <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
      <div id="devdoc-nav">

<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
      <div id="api-nav-header">
        <div id="api-level-toggle">
          <label for="apiLevelCheckbox" class="disabled">API level: </label>
          <div class="select-wrapper">
            <select id="apiLevelSelector">
              <!-- option elements added by buildApiLevelSelector() -->
            </select>
          </div>
        </div><!-- end toggle -->
        <div id="api-nav-title">Android APIs</div>
        </div><!-- end nav header -->
      <script>
        var SINCE_DATA = [  ];
        buildApiLevelSelector();
      </script>
                  
      <div id="swapper">
        <div id="nav-panels">
          <div id="resize-packages-nav">
            <div id="packages-nav" class="scroll-pane">

              <ul>
              	
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/package-summary.html">com.google.android.gms</a></li>
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/appstate/package-summary.html">com.google.android.gms.appstate</a></li>
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/auth/package-summary.html">com.google.android.gms.auth</a></li>
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/common/package-summary.html">com.google.android.gms.common</a></li>
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/common/data/package-summary.html">com.google.android.gms.common.data</a></li>
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/common/images/package-summary.html">com.google.android.gms.common.images</a></li>
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/games/package-summary.html">com.google.android.gms.games</a></li>
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/games/achievement/package-summary.html">com.google.android.gms.games.achievement</a></li>
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/games/leaderboard/package-summary.html">com.google.android.gms.games.leaderboard</a></li>
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/games/multiplayer/package-summary.html">com.google.android.gms.games.multiplayer</a></li>
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/games/multiplayer/realtime/package-summary.html">com.google.android.gms.games.multiplayer.realtime</a></li>
    <li class="selected api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/gcm/package-summary.html">com.google.android.gms.gcm</a></li>
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/location/package-summary.html">com.google.android.gms.location</a></li>
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/maps/package-summary.html">com.google.android.gms.maps</a></li>
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/maps/model/package-summary.html">com.google.android.gms.maps.model</a></li>
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/panorama/package-summary.html">com.google.android.gms.panorama</a></li>
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/plus/package-summary.html">com.google.android.gms.plus</a></li>
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/plus/model/moments/package-summary.html">com.google.android.gms.plus.model.moments</a></li>
    <li class="api apilevel-">
  <a href="../../../../../../reference/com/google/android/gms/plus/model/people/package-summary.html">com.google.android.gms.plus.model.people</a></li>
              </ul><br/>

            </div> <!-- end packages-nav -->
          </div> <!-- end resize-packages -->
          <div id="classes-nav" class="scroll-pane">



            <ul>
              
              
    <li><h2>Classes</h2>
      <ul>
          <li class="selected api apilevel-"><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html">GoogleCloudMessaging</a></li>
      </ul>
    </li>
              
              
              
            </ul><br/>
        

          </div><!-- end classes -->
        </div><!-- end nav-panels -->
        <div id="nav-tree" style="display:none" class="scroll-pane">
          <div id="tree-list"></div>
        </div><!-- end nav-tree -->
      </div><!-- end swapper -->
      <div id="nav-swap">
      <a class="fullscreen">fullscreen</a>
      <a href='#' onclick='swapNav();return false;'><span id='tree-link'>Use Tree Navigation</span><span id='panel-link' style='display:none'>Use Panel Navigation</span></a>
      </div>
    </div> <!-- end devdoc-nav -->
    </div> <!-- end side-nav -->
    <script type="text/javascript">
      // init fullscreen based on user pref
      var fullscreen = readCookie("fullscreen");
      if (fullscreen != 0) {
        if (fullscreen == "false") {
          toggleFullscreen(false);
        } else {
          toggleFullscreen(true);
        }
      }
      // init nav version for mobile
      if (isMobile) {
        swapNav(); // tree view should be used on mobile
        $('#nav-swap').hide();
      } else {
        chooseDefaultNav();
        if ($("#nav-tree").is(':visible')) {
          init_default_navtree("../../../../../../");
        }
      }
      // scroll the selected page into view
      $(document).ready(function() {
        scrollIntoView("packages-nav");
        scrollIntoView("classes-nav");
        });
    </script>

     
    <script>
      $(document).ready(function() {
        changeDocLang(getLangPref());
        });
    </script>



<div class="col-12"  id="doc-col">

<div id="api-info-block">



  
   
  
  
  
  


<div class="sum-details-links">

Summary:





  <a href="#constants">Constants</a>
  





  &#124; <a href="#pubctors">Ctors</a>
  



  &#124; <a href="#pubmethods">Methods</a>
  



  &#124; <a href="#inhmethods">Inherited Methods</a>

&#124; <a href="#" onclick="return toggleAllClassInherited()" id="toggleAllClassInherited">[Expand All]</a>

</div><!-- end sum-details-links -->
<div class="api-level">
  
  
  

</div>
</div><!-- end api-info-block -->


<!-- ======== START OF CLASS DATA ======== -->

<div id="jd-header">
    public
     
     
    
    class
<h1 itemprop="name">GoogleCloudMessaging</h1>



  
    extends Object<br/>
  
  
  

  
  
  


</div><!-- end header -->

<div id="naMessage"></div>

<div id="jd-content" class="api apilevel-">
<table class="jd-inheritance-table">


    <tr>
         	
        <td colspan="2" class="jd-inheritance-class-cell">java.lang.Object</td>
    </tr>
    

    <tr>
        
            <td class="jd-inheritance-space">&nbsp;&nbsp;&nbsp;&#x21b3;</td>
         	
        <td colspan="1" class="jd-inheritance-class-cell">com.google.android.gms.gcm.GoogleCloudMessaging</td>
    </tr>
    

</table>







<div class="jd-descr">


<h2>Class Overview</h2>
<p itemprop="articleBody"><p>The class you use to write a GCM-enabled client application that runs on an Android device.
 Client applications can receive GCM messages and optionally send messages of their own back to
 the server.

 <p>This class requires Google Play services version 3.1 or higher. For a
 detailed discussion of how to write a GCM client app, see
 <a href="http://developer.android.com/google/gcm/client.html">
 Implementing GCM Client</a>.

 <p>To send or receive messages, your application first needs to get a registration ID. The
 registration ID identifies the device and application, and also determines which 3rd-party
 application servers are allowed to send messages to this application instance.

 <p>To get a registration ID, you must supply one or more sender IDs. A sender ID is a project
 number you acquire from the API console, as described in
 <a href="http://developer.android.com/google/gcm/gs.html">Getting Started</a>. The sender ID is
 used in the registration process to identify a 3rd-party application server that is permitted to
 send messages to the device. The following snippet shows you how to call the
 <code><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#register(java.lang.String...)">register()</a></code> method. For a more comprehensive example, see
 <a href="http://developer.android.com/google/gcm/client.html">Implementing GCM Client</a>.

 <pre>
 String SENDER_ID = "My-Sender-ID";
 GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
 String registrationId = gcm.register(SENDER_ID);
 // Upload the registration ID to your own server
 // The request to your server should be authenticated if your app is using accounts.
 </pre>

 <p>In order to receive GCM messages, you need to declare a permission and a
 <code>BroadcastReceiver</code> in your manifest. This is a backward-compatible subset of what was
 required in previous versions of GCM.

 <p>To allow the application to use GCM, add this permission to the manifest:

 <pre>&lt;uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /&gt;</pre>

 <p>GCM delivers messages as a broadcast. The receivers must be registered in the manifest in
 order to wake up the application.

 <p>The <code>com.google.android.c2dm.permission.SEND permission</code> is held by Google Play
 services. This prevents other code from invoking the broadcast receiver. Here is an excerpt
 from a sample manifest:

 <pre>
 &lt;receiver android:name=".MyReceiver" android:exported="true"
     android:permission="com.google.android.c2dm.permission.SEND" &gt;
     &lt;intent-filter&gt;
        &lt;action android:name="com.google.android.c2dm.intent.RECEIVE" /&gt;
        &lt;category android:name="YOUR_PACKAGE_NAME" /&gt;
     &lt;/intent-filter&gt;
 &lt;/receiver&gt;</pre>

 <p>When a GCM connection server delivers the message to your client app, the
 <code>BroadcastReceiver</code> receives the message as an intent. You can either process the
 intent in the <code>BroadcastReceiver</code>, or you can pass off the work of processing the
 intent to a service (typically, an <code>IntentService</code>). If you use a service, your
 broadcast receiver should be an instance of <code>WakefulBroadcastReceiver</code>, to hold a
 wake lock while the service is doing its work.

 <p>When processing the intent GCM passes into your app's broadcase receiver, you can determine
 the message type by calling <code><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#getMessageType(android.content.Intent)">getMessageType(intent)</a></code>. For example:

 <pre>
 GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
 String messageType = gcm.getMessageType(intent);
 ...
 // Filter messages based on message type. It is likely that GCM will be extended in the future
 // with new message types, so just ignore message types you're not interested in, or that you
 // don't recognize.
 if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
    // It's an error.
 } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) {
    // Deleted messages on the server.
 } else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {
    // It's a regular GCM message, do some work.
 }
 </pre>

 <p>If you are using the XMPP-based
 <a href="http://developer.android.com/google/gcm/ccs.html">Cloud Connection Server</a>, your
 client app can send upstream messages back to the server. For example:

 <pre>
 gcm.send(SENDER_ID + "&#64;gcm.googleapis.com", id, data);
 </pre>

 For a more details, see
 <a href="http://developer.android.com/google/gcm/client.html">Implementing GCM Client</a>.
</p>





</div><!-- jd-descr -->
















<div class="jd-descr">


<h2>Summary</h2>













<!-- =========== ENUM CONSTANT SUMMARY =========== -->
<table id="constants" class="jd-sumtable"><tr><th colspan="12">Constants</th></tr>


    
    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol">String</td>
        <td class="jd-linkcol"><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#ERROR_MAIN_THREAD">ERROR_MAIN_THREAD</a></td>
        <td class="jd-descrcol" width="100%">The GCM <code><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#register(java.lang.String...)">register()</a></code> and <code><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#unregister()">unregister()</a></code> methods are
 blocking.</td>
    </tr>
    
    
    <tr class=" api apilevel-" >
        <td class="jd-typecol">String</td>
        <td class="jd-linkcol"><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#ERROR_SERVICE_NOT_AVAILABLE">ERROR_SERVICE_NOT_AVAILABLE</a></td>
        <td class="jd-descrcol" width="100%">The device can't read the response, or there was a 500/503 from the
 server that can be retried later.</td>
    </tr>
    
    
    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol">String</td>
        <td class="jd-linkcol"><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#MESSAGE_TYPE_DELETED">MESSAGE_TYPE_DELETED</a></td>
        <td class="jd-descrcol" width="100%">Returned by <code><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#getMessageType(android.content.Intent)">getMessageType(Intent)</a></code> to indicate that the server deleted
 some pending messages because they were collapsible.</td>
    </tr>
    
    
    <tr class=" api apilevel-" >
        <td class="jd-typecol">String</td>
        <td class="jd-linkcol"><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#MESSAGE_TYPE_MESSAGE">MESSAGE_TYPE_MESSAGE</a></td>
        <td class="jd-descrcol" width="100%">Returned by <code><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#getMessageType(android.content.Intent)">getMessageType(Intent)</a></code> to indicate a regular message.</td>
    </tr>
    
    
    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol">String</td>
        <td class="jd-linkcol"><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#MESSAGE_TYPE_SEND_ERROR">MESSAGE_TYPE_SEND_ERROR</a></td>
        <td class="jd-descrcol" width="100%">Returned by <code><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#getMessageType(android.content.Intent)">getMessageType(Intent)</a></code> to indicate a send error.</td>
    </tr>
    
    

</table>












<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<table id="pubctors" class="jd-sumtable"><tr><th colspan="12">Public Constructors</th></tr>



	 
    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            
            
            
            </nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad"><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#GoogleCloudMessaging()">GoogleCloudMessaging</a></span>()</nobr>
        
  </td></tr>



</table>






<!-- ========== METHOD SUMMARY =========== -->
<table id="pubmethods" class="jd-sumtable"><tr><th colspan="12">Public Methods</th></tr>



	 
    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            
            
            
            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad"><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#close()">close</a></span>()</nobr>
        
        <div class="jd-descrdiv">Must be called when your application is done using GCM, to release
 internal resources.</div>
  
  </td></tr>


	 
    <tr class=" api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            synchronized
            
            static
            
            <a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html">GoogleCloudMessaging</a></nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad"><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#getInstance(android.content.Context)">getInstance</a></span>(Context context)</nobr>
        
        <div class="jd-descrdiv">Return the singleton instance of GCM.</div>
  
  </td></tr>


	 
    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            
            
            
            String</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad"><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#getMessageType(android.content.Intent)">getMessageType</a></span>(Intent intent)</nobr>
        
        <div class="jd-descrdiv">Return the message type from an intent passed into a client app's broadcast receiver.</div>
  
  </td></tr>


	 
    <tr class=" api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            
            
            
            String</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad"><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#register(java.lang.String...)">register</a></span>(String... senderIds)</nobr>
        
        <div class="jd-descrdiv">Register the application for GCM and return the registration ID.</div>
  
  </td></tr>


	 
    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            
            
            
            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad"><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#send(java.lang.String, java.lang.String, long, android.os.Bundle)">send</a></span>(String to, String msgId, long timeToLive, Bundle data)</nobr>
        
        <div class="jd-descrdiv">Send an upstream ("device to cloud") message.</div>
  
  </td></tr>


	 
    <tr class=" api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            
            
            
            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad"><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#send(java.lang.String, java.lang.String, android.os.Bundle)">send</a></span>(String to, String msgId, Bundle data)</nobr>
        
        <div class="jd-descrdiv">Send an upstream ("device to cloud") message.</div>
  
  </td></tr>


	 
    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            
            
            
            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad"><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#unregister()">unregister</a></span>()</nobr>
        
        <div class="jd-descrdiv">Unregister the application.</div>
  
  </td></tr>



</table>







<!-- ========== METHOD SUMMARY =========== -->
<table id="inhmethods" class="jd-sumtable"><tr><th>
  <a href="#" class="toggle-all" onclick="return toggleAllInherited(this, null)">[Expand]</a>
  <div style="clear:left;">Inherited Methods</div></th></tr>


<tr class="api apilevel-" >
<td colspan="12">
  <a href="#" onclick="return toggleInherited(this, null)" id="inherited-methods-java.lang.Object" class="jd-expando-trigger closed"
          ><img id="inherited-methods-java.lang.Object-trigger"
          src="../../../../../../assets/images/triangle-closed.png"
          class="jd-expando-trigger-img" /></a>
From class

  java.lang.Object

<div id="inherited-methods-java.lang.Object">
  <div id="inherited-methods-java.lang.Object-list"
        class="jd-inheritedlinks">
  </div>
  <div id="inherited-methods-java.lang.Object-summary" style="display: none;">
    <table class="jd-sumtable-expando">
    


	 
    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            
            
            
            Object</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">clone</span>()</nobr>
        
  </td></tr>


	 
    <tr class=" api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            
            
            
            boolean</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">equals</span>(Object arg0)</nobr>
        
  </td></tr>


	 
    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            
            
            
            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">finalize</span>()</nobr>
        
  </td></tr>


	 
    <tr class=" api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            final
            
            
            Class&lt;?&gt;</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">getClass</span>()</nobr>
        
  </td></tr>


	 
    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            
            
            
            int</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">hashCode</span>()</nobr>
        
  </td></tr>


	 
    <tr class=" api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            final
            
            
            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">notify</span>()</nobr>
        
  </td></tr>


	 
    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            final
            
            
            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">notifyAll</span>()</nobr>
        
  </td></tr>


	 
    <tr class=" api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            
            
            
            String</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">toString</span>()</nobr>
        
  </td></tr>


	 
    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            final
            
            
            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">wait</span>()</nobr>
        
  </td></tr>


	 
    <tr class=" api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            final
            
            
            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">wait</span>(long arg0, int arg1)</nobr>
        
  </td></tr>


	 
    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>
            
            
            final
            
            
            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">wait</span>(long arg0)</nobr>
        
  </td></tr>


</table>
  </div>
</div>
</td></tr>


</table>


</div><!-- jd-descr (summary) -->

<!-- Details -->








<!-- XML Attributes -->


<!-- Enum Values -->


<!-- Constants -->


<!-- ========= ENUM CONSTANTS DETAIL ======== -->
<h2>Constants</h2>




<A NAME="ERROR_MAIN_THREAD"></A>

<div class="jd-details api apilevel-"> 
    <h4 class="jd-details-title">
      <span class="normal">
        public 
        static 
        final 
        String
      </span>
        ERROR_MAIN_THREAD
    </h4>
      <div class="api-level">
        
        
  

      </div>
    <div class="jd-details-descr">
      
  <div class="jd-tagdata jd-tagdescr"><p>The GCM <code><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#register(java.lang.String...)">register()</a></code> and <code><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#unregister()">unregister()</a></code> methods are
 blocking. You should not run them in the main thread or in broadcast receivers.
</p></div>

    
        <div class="jd-tagdata">
        <span class="jd-tagtitle">Constant Value: </span>
        <span>
            
                "MAIN_THREAD"
            
        </span>
        </div>
    
    </div>
</div>



<A NAME="ERROR_SERVICE_NOT_AVAILABLE"></A>

<div class="jd-details api apilevel-"> 
    <h4 class="jd-details-title">
      <span class="normal">
        public 
        static 
        final 
        String
      </span>
        ERROR_SERVICE_NOT_AVAILABLE
    </h4>
      <div class="api-level">
        
        
  

      </div>
    <div class="jd-details-descr">
      
  <div class="jd-tagdata jd-tagdescr"><p>The device can't read the response, or there was a 500/503 from the
 server that can be retried later. The application should use exponential
 back off and retry.
</p></div>

    
        <div class="jd-tagdata">
        <span class="jd-tagtitle">Constant Value: </span>
        <span>
            
                "SERVICE_NOT_AVAILABLE"
            
        </span>
        </div>
    
    </div>
</div>



<A NAME="MESSAGE_TYPE_DELETED"></A>

<div class="jd-details api apilevel-"> 
    <h4 class="jd-details-title">
      <span class="normal">
        public 
        static 
        final 
        String
      </span>
        MESSAGE_TYPE_DELETED
    </h4>
      <div class="api-level">
        
        
  

      </div>
    <div class="jd-details-descr">
      
  <div class="jd-tagdata jd-tagdescr"><p>Returned by <code><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#getMessageType(android.content.Intent)">getMessageType(Intent)</a></code> to indicate that the server deleted
 some pending messages because they were collapsible.
</p></div>

    
        <div class="jd-tagdata">
        <span class="jd-tagtitle">Constant Value: </span>
        <span>
            
                "deleted_messages"
            
        </span>
        </div>
    
    </div>
</div>



<A NAME="MESSAGE_TYPE_MESSAGE"></A>

<div class="jd-details api apilevel-"> 
    <h4 class="jd-details-title">
      <span class="normal">
        public 
        static 
        final 
        String
      </span>
        MESSAGE_TYPE_MESSAGE
    </h4>
      <div class="api-level">
        
        
  

      </div>
    <div class="jd-details-descr">
      
  <div class="jd-tagdata jd-tagdescr"><p>Returned by <code><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#getMessageType(android.content.Intent)">getMessageType(Intent)</a></code> to indicate a regular message.
</p></div>

    
        <div class="jd-tagdata">
        <span class="jd-tagtitle">Constant Value: </span>
        <span>
            
                "gcm"
            
        </span>
        </div>
    
    </div>
</div>



<A NAME="MESSAGE_TYPE_SEND_ERROR"></A>

<div class="jd-details api apilevel-"> 
    <h4 class="jd-details-title">
      <span class="normal">
        public 
        static 
        final 
        String
      </span>
        MESSAGE_TYPE_SEND_ERROR
    </h4>
      <div class="api-level">
        
        
  

      </div>
    <div class="jd-details-descr">
      
  <div class="jd-tagdata jd-tagdescr"><p>Returned by <code><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#getMessageType(android.content.Intent)">getMessageType(Intent)</a></code> to indicate a send error.
 The intent includes the message ID of the message and an error code.
</p></div>

    
        <div class="jd-tagdata">
        <span class="jd-tagtitle">Constant Value: </span>
        <span>
            
                "send_error"
            
        </span>
        </div>
    
    </div>
</div>




<!-- Fields -->


<!-- Public ctors -->


<!-- ========= CONSTRUCTOR DETAIL ======== -->
<h2>Public Constructors</h2>



<A NAME="GoogleCloudMessaging()"></A>

<div class="jd-details api apilevel-"> 
    <h4 class="jd-details-title">
      <span class="normal">
        public 
         
         
         
         
        
      </span>
      <span class="sympad">GoogleCloudMessaging</span>
      <span class="normal">()</span>
    </h4>
      <div class="api-level">
        <div></div>
        
  

      </div>
    <div class="jd-details-descr">
      
  <div class="jd-tagdata jd-tagdescr"><p></p></div>

    </div>
</div>





<!-- ========= CONSTRUCTOR DETAIL ======== -->
<!-- Protected ctors -->



<!-- ========= METHOD DETAIL ======== -->
<!-- Public methdos -->

<h2>Public Methods</h2>



<A NAME="close()"></A>

<div class="jd-details api apilevel-"> 
    <h4 class="jd-details-title">
      <span class="normal">
        public 
         
         
         
         
        void
      </span>
      <span class="sympad">close</span>
      <span class="normal">()</span>
    </h4>
      <div class="api-level">
        <div></div>
        
  

      </div>
    <div class="jd-details-descr">
      
  <div class="jd-tagdata jd-tagdescr"><p>Must be called when your application is done using GCM, to release
 internal resources.
</p></div>

    </div>
</div>


<A NAME="getInstance(android.content.Context)"></A>

<div class="jd-details api apilevel-"> 
    <h4 class="jd-details-title">
      <span class="normal">
        public 
        static 
         
         
        synchronized 
        <a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html">GoogleCloudMessaging</a>
      </span>
      <span class="sympad">getInstance</span>
      <span class="normal">(Context context)</span>
    </h4>
      <div class="api-level">
        <div></div>
        
  

      </div>
    <div class="jd-details-descr">
      
  <div class="jd-tagdata jd-tagdescr"><p>Return the singleton instance of GCM.</p></div>

    </div>
</div>


<A NAME="getMessageType(android.content.Intent)"></A>

<div class="jd-details api apilevel-"> 
    <h4 class="jd-details-title">
      <span class="normal">
        public 
         
         
         
         
        String
      </span>
      <span class="sympad">getMessageType</span>
      <span class="normal">(Intent intent)</span>
    </h4>
      <div class="api-level">
        <div></div>
        
  

      </div>
    <div class="jd-details-descr">
      
  <div class="jd-tagdata jd-tagdescr"><p>Return the message type from an intent passed into a client app's broadcast receiver. There
 are two general categories of messages passed from the server: regular GCM messages,
 and special GCM status messages.

 The possible types are:
 <ul>
   <li><code><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#MESSAGE_TYPE_MESSAGE">MESSAGE_TYPE_MESSAGE</a></code>&mdash;regular message from your server.
   </li><li><code><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#MESSAGE_TYPE_DELETED">MESSAGE_TYPE_DELETED</a></code>&mdash;special status message indicating that some
     messages have been collapsed by GCM.
   </li><li><code><a href="../../../../../../reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#MESSAGE_TYPE_SEND_ERROR">MESSAGE_TYPE_SEND_ERROR</a></code>&mdash;special status message indicating that
     there were errors sending one of the messages.
  </li></ul>

 You can use this method to filter based on message type. Since it is likely that GCM will
 be extended in the future with new message types, just ignore any message types you're not
 interested in, or that you don't recognize.</p></div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Returns</h5>
      <ul class="nolist"><li>The message type or null if the intent is not a GCM intent
</li></ul>
  </div>

    </div>
</div>


<A NAME="register(java.lang.String...)"></A>

<div class="jd-details api apilevel-"> 
    <h4 class="jd-details-title">
      <span class="normal">
        public 
         
         
         
         
        String
      </span>
      <span class="sympad">register</span>
      <span class="normal">(String... senderIds)</span>
    </h4>
      <div class="api-level">
        <div></div>
        
  

      </div>
    <div class="jd-details-descr">
      
  <div class="jd-tagdata jd-tagdescr"><p>Register the application for GCM and return the registration ID. You must call this once,
 when your application is installed, and send the returned registration ID to the server.
 <p>
 Repeated calls to this method will return the original registration ID.
 <p>
 If you want to modify the list of senders, you must call <code>unregister()</code> first.
 <p>
 Most applications use a single sender ID. You may use multiple senders if different
 servers may send messages to the app or for testing.</p></div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Parameters</h5>
      <table class="jd-tagtable">
        <tr>
          <th>senderIds</td>
          <td>list of project numbers or Google accounts identifying who is allowed to
   send messages to this application.</td>
        </tr>
      </table>
  </div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Returns</h5>
      <ul class="nolist"><li>registration id
</li></ul>
  </div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Throws</h5>
      <table class="jd-tagtable">  
        <tr>
            <th>IOException</td>
            <td></td>
        </tr>
      </table>
  </div>

    </div>
</div>


<A NAME="send(java.lang.String, java.lang.String, long, android.os.Bundle)"></A>

<div class="jd-details api apilevel-"> 
    <h4 class="jd-details-title">
      <span class="normal">
        public 
         
         
         
         
        void
      </span>
      <span class="sympad">send</span>
      <span class="normal">(String to, String msgId, long timeToLive, Bundle data)</span>
    </h4>
      <div class="api-level">
        <div></div>
        
  

      </div>
    <div class="jd-details-descr">
      
  <div class="jd-tagdata jd-tagdescr"><p>Send an upstream ("device to cloud") message. You can only use the upstream feature
 if your GCM implementation uses the XMPP-based
 <a href="http://developer.android.com/google/gcm/ccs.html">Cloud Connection Server</a>.

 The current limits for max storage time and number of outstanding messages per
 application are documented in the
 <a href="http://developer.android.com/google/gcm/index.html">GCM Developers Guide</a>.</p></div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Parameters</h5>
      <table class="jd-tagtable">
        <tr>
          <th>to</td>
          <td>string identifying the receiver of the message. For GCM projects IDs
   the value is <code>SENDER_ID@gcm.googleapis.com</code>. The <code>SENDER_ID</code>
   should be one of the sender IDs used in <code>register()</code>.</td>
        </tr>
        <tr>
          <th>msgId</td>
          <td>ID of the message. This is generated by the application. It must be
   unique for each message. This allows error callbacks and debugging.</td>
        </tr>
        <tr>
          <th>timeToLive</td>
          <td>If 0, we'll attempt to send immediately and return an
   error if we're not connected. Otherwise, the message will be queued.
   As for server-side messages, we don't return an error if the message has been
   dropped because of TTL&mdash;this can happen on the server side, and it would require
   extra communication.</td>
        </tr>
        <tr>
          <th>data</td>
          <td>key/value pairs to be sent. Values must be String, any other type will
   be ignored.</td>
        </tr>
      </table>
  </div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Throws</h5>
      <table class="jd-tagtable">  
        <tr>
            <th>IllegalArgumentException</td>
            <td></td>
        </tr>  
        <tr>
            <th>IOException</td>
            <td></td>
        </tr>
      </table>
  </div>

    </div>
</div>


<A NAME="send(java.lang.String, java.lang.String, android.os.Bundle)"></A>

<div class="jd-details api apilevel-"> 
    <h4 class="jd-details-title">
      <span class="normal">
        public 
         
         
         
         
        void
      </span>
      <span class="sympad">send</span>
      <span class="normal">(String to, String msgId, Bundle data)</span>
    </h4>
      <div class="api-level">
        <div></div>
        
  

      </div>
    <div class="jd-details-descr">
      
  <div class="jd-tagdata jd-tagdescr"><p>Send an upstream ("device to cloud") message. You can only use the upstream feature
 if your GCM implementation uses the XMPP-based
 <a href="http://developer.android.com/google/gcm/ccs.html">Cloud Connection Server</a>.

 The message will be queued if we don't have an active connection for the max interval.</p></div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Parameters</h5>
      <table class="jd-tagtable">
        <tr>
          <th>to</td>
          <td>string identifying the receiver of the message. For GCM project IDs
   the value is <code>SENDER_ID@gcm.googleapis.com</code>. The <code>SENDER_ID</code>
   should be one of the sender IDs used in <code>register()</code>.</td>
        </tr>
        <tr>
          <th>msgId</td>
          <td>ID of the message. This is generated by the application. It must be
   unique for each message. This allows error callbacks and debugging.</td>
        </tr>
        <tr>
          <th>data</td>
          <td>key/value pairs to be sent. Values must be String&mdash;any other type will
   be ignored.</td>
        </tr>
      </table>
  </div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Throws</h5>
      <table class="jd-tagtable">  
        <tr>
            <th></td>
            <td>IllegalArgumentException</td>
        </tr>  
        <tr>
            <th>IOException</td>
            <td></td>
        </tr>
      </table>
  </div>

    </div>
</div>


<A NAME="unregister()"></A>

<div class="jd-details api apilevel-"> 
    <h4 class="jd-details-title">
      <span class="normal">
        public 
         
         
         
         
        void
      </span>
      <span class="sympad">unregister</span>
      <span class="normal">()</span>
    </h4>
      <div class="api-level">
        <div></div>
        
  

      </div>
    <div class="jd-details-descr">
      
  <div class="jd-tagdata jd-tagdescr"><p>Unregister the application. Calling <code>unregister()</code> stops any
 messages from the server. This is a blocking call&mdash;you shouldn't call
 it from the UI thread.

 You should rarely (if ever) need to call this method. Not only is it
 expensive in terms of resources, but it invalidates your registration ID,
 which you should never change unnecessarily. A better approach is to simply
 have your server stop sending messages. Only use unregister if you want
 to change your sender ID.</p></div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Throws</h5>
      <table class="jd-tagtable">  
        <tr>
            <th>IOException</td>
            <td>if we can't connect to server to unregister.
</td>
        </tr>
      </table>
  </div>

    </div>
</div>





<!-- ========= METHOD DETAIL ======== -->



<!-- ========= END OF CLASS DATA ========= -->
<A NAME="navbar_top"></A>

<div id="footer" class="wrap" >
        

  <div id="copyright">
    
  Except as noted, this content is licensed under <a
  href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a>. 
  For details and restrictions, see the <a href="../../../../../../license.html">
  Content License</a>.
  </div>
  <div id="build_info">
    
    Android &nbsp;r &mdash; 18 Sep 2013 12:36

  </div>


  <div id="footerlinks">
    
  <p>
    <a href="../../../../../../about/index.html">About Android</a>&nbsp;&nbsp;|&nbsp;
    <a href="../../../../../../legal.html">Legal</a>&nbsp;&nbsp;|&nbsp;
    <a href="../../../../../../support.html">Support</a>
  </p>
  </div>

</div> <!-- end footer -->
</div> <!-- jd-content -->

</div><!-- end doc-content -->

</div> <!-- end body-content --> 




<!-- Grid - for dev 
<script type="text/javascript">

window.gOverride = {
		gColor: '#FF0000',
		pColor: '#EEEEEE',
		gOpacity: 0.10,
		pOpacity: 0.40,
		pHeight: 16,
		pOffset: 2,
		gColumns:16,
		gEnabled:false,
		pEnabled:false
	}
</script>
	
<link href="../../../../../../assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
<script src="../../../../../../assets/js/grid/960.gridder.js" type="text/javascript"></script>
-->





<script type="text/javascript">
init(); /* initialize android-developer-docs.js */
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>

<script type="text/javascript">
  var pageTracker = _gat._getTracker("UA-5831155-1");
  pageTracker._trackPageview();
</script>



</body>
</html>
